perm filename VHACK.SAI[CMS,LCS] blob sn#169943 filedate 1975-08-22 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "VMAP"
C00004 00003	INTEGER TRUNCATE,ATTENUATE,NEGATE,CONTOUR
C00006 ENDMK
C⊗;
BEGIN "VMAP"

REQUIRE "PROLOG.HDR[1,PDQ]" SOURCE_FILE;
REQUIRE "TTYSUB.HDR[1,PDQ]" SOURCE_FILE;

INTEGER CHN,EOF,I;
DEFINE N=63;
DEFINE MASK='377, OBPS=8,IBPS=6;

INTEGER_ARRAY TABL[0:N];

REAL GAMMA;

DEFINE MAPADR='771000;

INTEGER PROCEDURE GAMFN(INTEGER I);
BEGIN	INTEGER M;
	M←1 LSH OBPS;
	RETURN(M*(I/M)↑GAMMA);
END;

PROCEDURE MAPSET(INTEGER_ARRAY TABL);
BEGIN
INTEGER WD;
WD←1 LSH 35 + 1 LSH 17 + MAPADR LSH -1;
USETO(CHN,LOCATION(WD));
USETI(CHN,LOCATION(WD));
ARRYOUT(CHN,TABL[0],N+1);
END;



PROCEDURE HACK(INTEGER_ARRAY TABL);

 WHILE INCHRS<0 DO
	BEGIN	INTEGER V,I;
		V←TABL[0];
		FOR I←0 STEP 1 UNTIL N-1 DO
		 TABL[I]←TABL[I+1];
		TABL[N]←V;
		MAPSET(TABL);
	END;

INTEGER TRUNCATE,ATTENUATE,NEGATE,CONTOUR;

OPEN(CHN←GETCHAN,"ELF",'17,0,0,0,0,EOF);
GAMMA←1;
CONTOUR←ATTENUATE←TRUNCATE←0;
NEGATE←FALSE;

WHILE TRUE DO
BEGIN
STRING STR;
INTEGER C;
REAL X;

STR←STRIN("←");
C←LOP(STR);
X←REALSCAN(STR,0);
CASE C OF
  BEGIN	["G"] GAMMA←X;
	["←"] CONTOUR←X;
	["→"] ATTENUATE←X;
	["T"] TRUNCATE←X;
	["H"] HACK(TABL);
	["-"] NEGATE←NOT(NEGATE)
  END;

FOR I←0 STEP 1 UNTIL N DO
 BEGIN
	INTEGER V;
	V←I LSH (OBPS-IBPS);
	V←((V LSH CONTOUR) LAND MASK) LOR (V LSH (CONTOUR-OBPS));
	V←GAMFN(V);
	V←V LSH -ATTENUATE;
	V←V LAND (-1 LSH TRUNCATE);
	IF NEGATE THEN V←V XOR MASK;
	TABL[I]←V;
 END;

MAPSET(TABL);
END;


RELEASE(CHN);

END;